package com.cmict.data.infra.service.rdb;

import java.util.*;
import javax.validation.*;

import com.cmict.data.framework.common.pojo.CommonResult;
import com.cmict.data.infra.api.rdb.dto.SourceDTO;
import com.cmict.data.infra.controller.admin.rdb.vo.*;
import com.cmict.data.infra.dal.dataobject.rdb.RdbDO;
import com.cmict.data.framework.common.pojo.PageResult;
import com.cmict.data.infra.dal.dataobject.source.SourceDO;

/**
 * 数据库 Service 接口
 *
 * @author awesome1114
 */
public interface RdbService {

    /**
     * 创建数据库
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRdb(@Valid RdbCreateReqVO createReqVO);

    /**
     * 更新数据库
     *
     * @param updateReqVO 更新信息
     */
    void updateRdb(@Valid RdbUpdateReqVO updateReqVO);

    /**
     * 删除数据库
     *
     * @param id 编号
     */
    void deleteRdb(Long id);

    /**
     * 获得数据库
     *
     * @param id 编号
     * @return 数据库
     */
    RdbDO getRdb(Long id);

    /**
     * 获得数据库列表
     *
     * @param ids 编号
     * @return 数据库列表
     */
    List<RdbDO> getRdbList(Collection<Long> ids);

    /**
     * 获得数据库分页
     *
     * @param pageReqVO 分页查询
     * @return 数据库分页
     */
    PageResult<RdbDO> getRdbPage(RdbPageReqVO pageReqVO);

    /**
     * 获得数据库列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 数据库列表
     */
    List<RdbDO> getRdbList(RdbExportReqVO exportReqVO);

    void testRdb(RdbTest rdbTest);

    Set<RdbRespVO> getIpGroupChildren();

    void batchDeleteRdb(Collection<Long> ids);

    CommonResult executeSql(RdbSqlPage rdbSqlPage);

    CommonResult sourceTestList(RdbSourceSql rdbSql);

    CommonResult executeListBySql(RdbSql rdbSql);

    CommonResult getColumnList(RdbSql rdbSql);

    CommonResult getDataList(RdbSql rdbSql);

    CommonResult createTable(RdbCreateTableVo rdbCreateTableVo);

    SourceDTO getSourceDOById(Long id);
}
